package main

import (
	"errors"
	"fmt"
)

/*
怎样判断一个错误值具体代表的是哪一类错误？
	1.对于类型在已知范围内的一系列错误值，一般使用类型断言表达式或类型switch语句来判断；
	2.对于已有相应变量且类型相同的一系列错误值，一般直接使用判等操作来判断；
	3.对于没有相应变量且类型未知的一系列错误值，只能使用其错误信息的字符串表示形式来做判断。
 */

/*
	echo函数接受一个string类型的参数request，并会返回两个结果。
	第一个结果response也是string类型的，它代表了这个函数正常执行后的结果值。
	第二个结果err就是error类型的，它代表了函数执行出错时的结果值，同时也包含了具体的错误信息。
 */
func echo(request string) (response string, err error) {
	if request == ""{
		err :=errors.New("empty request")
		return "", err
	}
	response = fmt.Sprintf("echo: %s", request)
	return response, nil
}

func main() {

	for _, req :=range [] string{"", "hello!"} {
		fmt.Printf("request: %s\n", req)
		response, err := echo(req)
		if err != nil {
			fmt.Printf("error: %s\n", err)
			continue
		}
		fmt.Printf("response: %s\n", response)
	}

}
